import axios from './axios.interceptors.js'
/**
 * 微信小程序标准版：统一封装的 http 请求类
 */
class Http {
  /**
	 * prefix of Http _get _post ...
	 * @param baseUrl: string
	 */
  constructor (baseUrl = '') {
    if (typeof baseUrl !== 'string') {
      throw new Error('Http baseUrl must be a string')
    }
    this.baseUrl = baseUrl
  }

  /**
	 * api address
	 * @param url: string
	 */
  checkUrl (url) {
    if (url.indexOf('://') === -1) {
      url = this.baseUrl + url
    }
    return url
  }

  /* 这里修改成箭头函数，里边的 this 指向不跟着调用者改变，指向的就是本身外层的 this 对象 */
  _post (url, data, headers = {
    'Content-Type': 'application/json'
  }) {
    return new Promise((resolve, reject) => {
      axios.post(url, data, headers)
        .then(res => {
          if (res.data.code_status === 0) {
            resolve(res.data.data)
          } else {
            reject(res.data)
          }
        })
        .catch(err => {
          reject(err)
        })
    })
  }

  /* 这里修改成箭头函数，里边的 this 指向不跟着调用者改变，指向的就是本身外层的 this 对象 */
  _postWithOrigin (url, data, headers = {
    'Content-Type': 'application/json'
  }) {
    return new Promise((resolve, reject) => {
      axios.post(this.checkUrl(url), data, headers)
        .then(res => {
          if (res.data.code_status === 0) {
            resolve(res.data.data)
          } else {
            reject(res.data)
          }
        })
        .catch(err => {
          reject(err)
        })
    })
  }

  /* 这里修改成箭头函数，里边的 this 指向不跟着调用者改变，指向的就是本身外层的 this 对象 */
  _get (url, config = {}) {
    return new Promise((resolve, reject) => {
      axios.get(url, config)
        .then(res => {
          resolve(res)
        })
        .catch(err => {
          reject(err)
        })
    })
  }
}

// String.prototype.TrimStr = function () {
//   return this.replace(/(^\s*)|(\s*$)/g, '')
// }

export default Http
